Concurrency এবং Asynchronous Sockets Python এ প্রয়োগ

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket Programming in Python (Python এ Socket Programming) |
248
248

Concurrency এবং Asynchronous Sockets Python এ প্রয়োগ

Concurrency এবং Asynchronous Sockets হল নেটওয়ার্ক প্রোগ্রামিংয়ের গুরুত্বপূর্ণ ধারণা যা একাধিক টাস্ক একযোগে পরিচালনা করার জন্য ব্যবহৃত হয়। এই ধারণাগুলি সিস্টেমের কার্যকারিতা বৃদ্ধি করতে সহায়ক, বিশেষ করে যখন একাধিক ক্লায়েন্ট বা নেটওয়ার্কের মধ্যে চলমান অনেক কাজ পরিচালনা করতে হয়।

এখানে, Concurrency এবং Asynchronous Sockets এর মধ্যে পার্থক্য এবং Python এ তাদের প্রয়োগের উদাহরণ দেয়া হবে।


১. Concurrency (সমান্তরালতা)

Concurrency হল একাধিক কাজ একই সময়ে সম্পাদিত হওয়ার সম্ভাবনা, কিন্তু তাদের সমাপ্তি একে অপরের সাথে ওভারল্যাপ করতে পারে। Concurrency একাধিক কাজ বা থ্রেডের মধ্যে প্রসেসগুলিকে পরিচালনা করতে সাহায্য করে, যদিও একাধিক কাজ একযোগে সম্পাদন নাও হতে পারে। উদাহরণস্বরূপ, একটি সার্ভার যখন একাধিক ক্লায়েন্টের সাথে যোগাযোগ স্থাপন করে, তখন এটি একযোগে তাদের থেকে ডেটা গ্রহণ বা পাঠাতে সক্ষম হয়।

Concurrency সৃষ্টির জন্য Python এ থ্রেডিং ব্যবহার:

import socket
import threading

def handle_client(client_socket):
    request = client_socket.recv(1024)
    print(f"Received: {request.decode()}")
    client_socket.send(b"Hello Client")
    client_socket.close()

def start_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('127.0.0.1', 65432))
    server.listen(5)
    print("Server listening on port 65432")

    while True:
        client_socket, client_address = server.accept()
        print(f"Connection from {client_address}")
        client_handler = threading.Thread(target=handle_client, args=(client_socket,))
        client_handler.start()

start_server()

এখানে, প্রতিটি ক্লায়েন্টের জন্য একটি নতুন থ্রেড তৈরি করা হচ্ছে, যাতে সার্ভার একাধিক ক্লায়েন্টের সাথে সমান্তরালভাবে যোগাযোগ স্থাপন করতে পারে। এর মাধ্যমে প্রতিটি ক্লায়েন্টের জন্য আলাদা ট্রেডিং করা হয়, যা সার্ভারকে একাধিক ক্লায়েন্টের সাথে যোগাযোগ করতে সক্ষম করে।


২. Asynchronous Sockets (আসিঙ্ক্রোনাস সকেট)

Asynchronous Sockets এমন এক ধরনের সকেট প্রোগ্রামিং যেখানে একটি থ্রেড ব্লক না হয়ে ব্যাকগ্রাউন্ডে কাজ করতে থাকে। এর মাধ্যমে, নেটওয়ার্কের মধ্যে ডেটা পাঠানোর জন্য অপেক্ষা করার সময় অন্য কাজ করা যায়। Asynchronous programming সাধারণত callback functions বা event-driven programming ব্যবহার করে কাজ করে।

Python এর asyncio লাইব্রেরি দিয়ে সহজেই Asynchronous সোসকেট প্রোগ্রাম তৈরি করা যায়।

Asynchronous Socket Server উদাহরণ (Python asyncio):

import asyncio

async def handle_client(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')
    print(f"Received {message} from {addr}")

    response = f"Hello, {message}"
    writer.write(response.encode())
    await writer.drain()

    print("Closing the connection")
    writer.close()

async def main():
    server = await asyncio.start_server(
        handle_client, '127.0.0.1', 65432)
    
    addr = server.sockets[0].getsockname()
    print(f"Serving on {addr}")

    async with server:
        await server.serve_forever()

asyncio.run(main())

এখানে asyncio ব্যবহার করা হয়েছে যা আসিঙ্ক্রোনাস সার্ভার তৈরি করতে সাহায্য করে। যখন ক্লায়েন্ট সংযোগ করে, তখন handle_client() ফাংশন আসিঙ্ক্রোনাসভাবে কাজ করে এবং সেই সময় অন্য ক্লায়েন্টদের জন্য সার্ভারটি কার্যকরী থাকে।

  • async def: অ্যাসিঙ্ক্রোনাস ফাংশন তৈরি করে।
  • await: ইভেন্টের শেষ হওয়া পর্যন্ত অপেক্ষা করে, তবে পুরো থ্রেড ব্লক না হয়।
  • asyncio.start_server(): সার্ভার শুরু করে এবং আসিঙ্ক্রোনাসভাবে ক্লায়েন্টদের সাথে কাজ করতে পারে।

৩. Concurrency এবং Asynchronous Sockets এর পার্থক্য

  • Concurrency: একাধিক কাজ একযোগে সম্পাদন হতে পারে, তবে সব কাজ এক সময় কার্যকরী না হয়ে পর্যায়ক্রমে হতে পারে। এখানে সাধারণত থ্রেডিং ব্যবহৃত হয়।
  • Asynchronous Sockets: এক বা একাধিক কাজ একই সময়ে চলতে পারে, তবে থ্রেড ব্লক না হয়ে ব্যাকগ্রাউন্ডে কাজ করে। এতে ইভেন্ট-ড্রিভেন প্রোগ্রামিং ব্যবহৃত হয় এবং কার্যকারিতা বাড়ে।

৪. Concurrency এবং Asynchronous Sockets এর যৌথ ব্যবহারের উদাহরণ

একটি ওয়েব সার্ভারে Concurrency এবং Asynchronous Programming এর একত্রিত ব্যবহার হতে পারে যেখানে সার্ভারটি একাধিক ক্লায়েন্টের সাথে একযোগে যোগাযোগ করে এবং সেগুলির প্রতিক্রিয়া দ্রুত সরবরাহ করে।

উদাহরণ: Asynchronous এবং Concurrency ব্যবহার করা সার্ভার:

import asyncio
import threading

# আসিঙ্ক্রোনাস হ্যান্ডলার
async def handle_client(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')
    print(f"Received {message} from {addr}")

    response = f"Hello, {message}"
    writer.write(response.encode())
    await writer.drain()

    print("Closing the connection")
    writer.close()

# থ্রেডেড অ্যাসিঙ্ক্রোনাস সার্ভার
def run_server():
    asyncio.run(main())

async def main():
    server = await asyncio.start_server(
        handle_client, '127.0.0.1', 65432)

    addr = server.sockets[0].getsockname()
    print(f"Serving on {addr}")

    async with server:
        await server.serve_forever()

# সার্ভার থ্রেড তৈরি করা
server_thread = threading.Thread(target=run_server)
server_thread.start()

এখানে, একটি থ্রেড তৈরি করা হয়েছে যা আসিঙ্ক্রোনাস সার্ভার চালায়। এর ফলে সার্ভারটি একাধিক ক্লায়েন্টকে সঠিকভাবে পরিচালনা করতে পারে এবং প্রতিটি ক্লায়েন্টের জন্য অপেক্ষা করার পরিবর্তে ব্যাকগ্রাউন্ডে কাজ করতে থাকে।


উপসংহার

  • Concurrency এবং Asynchronous Sockets দুইটি নেটওয়ার্ক প্রোগ্রামিং কৌশল যা একাধিক কাজ একযোগে সম্পাদন করার জন্য ব্যবহৃত হয়।
  • Concurrency সাধারণত থ্রেডিং এর মাধ্যমে কাজ সম্পাদিত করে, যেখানে একাধিক কাজ একই সময়ে সম্পাদিত হতে পারে।
  • Asynchronous Sockets ব্যবহার করে আপনি একক থ্রেডে একাধিক কাজ চালাতে পারেন, এতে থ্রেড ব্লক না হয়ে ব্যাকগ্রাউন্ডে কাজ হয়।
  • Python এর asyncio লাইব্রেরি এবং threading লাইব্রেরি দিয়ে এই কৌশলগুলি সহজেই বাস্তবায়ন করা যায়।

এভাবে, Concurrency এবং Asynchronous Programming এর সমন্বয় করা গেলে নেটওয়ার্ক সার্ভার এবং অ্যাপ্লিকেশনগুলি আরও দক্ষ এবং স্কেলেবল হতে পারে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion